
package br.com.cinesystem.control;

import br.com.cinesystem.entity.Cinema;
import br.com.cinesystem.entity.Endereco;
import br.com.cinesystem.entity.Usuario;
import br.com.cinesystem.persistence.CinemaDao;
import br.com.cinesystem.persistence.EnderecoDao;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ManterCinema extends HttpServlet {
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=ISO-8859-1");

        String cmd = request.getParameter("cmd");
        PrintWriter out = response.getWriter();
       

            if (cmd != null){

                if (cmd.equals("cadastrar")){

                    EnderecoDao ed = null;
                    CinemaDao cd = null;
                    String destino = "cinema.do?cmd=form";
                    try{

                        cd = new CinemaDao();
                        ed = new EnderecoDao();

                        if(request.getParameter("razao").isEmpty()){

                            throw new Exception("*Razão Social é um campo obrigatório!");

                        }else{
                            if(request.getParameter("cnpj").isEmpty()){

                               throw new Exception("*CNPJ é um campo obrigatório!");

                            }else{
                                if(request.getParameter("logradouro").isEmpty()){

                                   throw new Exception("*Logradouro é um campo obrigatório!");

                                }else{
                                    if(request.getParameter("numero").isEmpty()){

                                        throw new Exception("*Número é um campo obrigatório!");

                                    }else{
                                        if(request.getParameter("cep").isEmpty()){

                                            throw new Exception("*CEP é um campo obrigatório!");

                                        }else{
                                            if(request.getParameter("bairro").isEmpty()){

                                                throw new Exception("*Bairro é um campo obrigatório!");

                                            }else{
                                                if(request.getParameter("cidade").isEmpty()){

                                                    throw new Exception("*Cidade é um campo obrigatório!");

                                                }else{
                                                    if(request.getParameter("estado").isEmpty()){

                                                        throw new Exception("*Estado é um campo obrigatório!");

                                                    }else{
                                                        if(cd.razaoExistente(request.getParameter("razao"))){

                                                            throw new Exception("*Razão Social já existente!");

                                                        }else{

                                                            Endereco endereco = new Endereco();


                                                            endereco.setLogradouro(request.getParameter("logradouro"));
                                                            endereco.setNumero(request.getParameter("numero"));
                                                            endereco.setComplemento(request.getParameter("complemento"));
                                                            endereco.setCep(request.getParameter("cep"));
                                                            endereco.setBairro(request.getParameter("bairro"));
                                                            endereco.setCidade(request.getParameter("cidade"));
                                                            endereco.setEstado(request.getParameter("estado"));

                                                            Endereco ende = ed.pesquisarEndereco(endereco);

                                                            Cinema c = new Cinema();

                                                            c.setRazaoSocial(request.getParameter("razao"));
                                                            c.setCnpj(request.getParameter("cnpj"));
                                                            c.setTelefone(request.getParameter("tel"));

                                                            c.setEndereco(new Endereco());

                                                           if(ende!=null){

                                                                c.getEndereco().setIdEndereco(ende.getIdEndereco());
                                                                c.getEndereco().setLogradouro(ende.getLogradouro());
                                                                c.getEndereco().setNumero(ende.getNumero());
                                                                c.getEndereco().setComplemento(ende.getComplemento());
                                                                c.getEndereco().setCep(ende.getCep());
                                                                c.getEndereco().setBairro(ende.getBairro());
                                                                c.getEndereco().setCidade(ende.getCidade());
                                                                c.getEndereco().setEstado(ende.getEstado());

                                                            }else{

                                                                c.getEndereco().setLogradouro(request.getParameter("logradouro"));
                                                                c.getEndereco().setNumero(request.getParameter("numero"));
                                                                c.getEndereco().setComplemento(request.getParameter("complemento"));
                                                                c.getEndereco().setCep(request.getParameter("cep"));
                                                                c.getEndereco().setBairro(request.getParameter("bairro"));
                                                                c.getEndereco().setCidade(request.getParameter("cidade"));
                                                                c.getEndereco().setEstado(request.getParameter("estado"));

                                                                Endereco end = ed.salvar(c.getEndereco());

                                                                c.getEndereco().setIdEndereco(end.getIdEndereco());

                                                            }


                                                            cd.salvar(c);
                                                            destino = "cinema.do?cmd=listar";
                                                            request.setAttribute("mensagem", "*Cinema cadastrado com sucesso.");

                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        
                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{
      
                        request.getRequestDispatcher(destino).forward(request, response);
                    }

                }

                if (cmd.equals("alterar")){

                    EnderecoDao ed = null;
                    CinemaDao cd = null;

                    String destino = "cinema.do?cmd=buscar&id="+request.getParameter("id");
                    
                    try{
                        ed = new EnderecoDao();
                        cd = new CinemaDao();

                        if(request.getParameter("razao").isEmpty()){

                            throw new Exception("*Razão Social é um campo obrigatório!");

                        }else{
                            if(request.getParameter("cnpj").isEmpty()){

                               throw new Exception("*CNPJ é um campo obrigatório!");

                            }else{
                                if(request.getParameter("logradouro").isEmpty()){

                                   throw new Exception("*Logradouro é um campo obrigatório!");

                                }else{
                                    if(request.getParameter("numero").isEmpty()){

                                        throw new Exception("*Número é um campo obrigatório!");

                                    }else{
                                        if(request.getParameter("cep").isEmpty()){

                                            throw new Exception("*CEP é um campo obrigatório!");

                                        }else{
                                            if(request.getParameter("bairro").isEmpty()){

                                                throw new Exception("*Bairro é um campo obrigatório!");

                                            }else{
                                                if(request.getParameter("cidade").isEmpty()){

                                                    throw new Exception("*Cidade é um campo obrigatório!");

                                                }else{
                                                    if(request.getParameter("estado").isEmpty()){

                                                        throw new Exception("*Estado é um campo obrigatório!");

                                                    }else{

                                                        Endereco endereco = new Endereco();

                                                        endereco.setLogradouro(request.getParameter("logradouro"));
                                                        endereco.setNumero(request.getParameter("numero"));
                                                        endereco.setComplemento(request.getParameter("complemento"));
                                                        endereco.setCep(request.getParameter("cep"));
                                                        endereco.setBairro(request.getParameter("bairro"));
                                                        endereco.setCidade(request.getParameter("cidade"));
                                                        endereco.setEstado(request.getParameter("estado"));

                                                        Endereco ende = ed.pesquisarEndereco(endereco);

                                                        Cinema c = new Cinema();

                                                        c.setEndereco(new Endereco());

                                                        c.setRazaoSocial(request.getParameter("razao"));
                                                        c.setCnpj(request.getParameter("cnpj"));
                                                        c.setTelefone(request.getParameter("tel"));
                                                        c.setIdCinema(Integer.parseInt(request.getParameter("idcinema")));

                                                        if(ende!=null){

                                                            c.getEndereco().setIdEndereco(ende.getIdEndereco());
                                                            c.getEndereco().setLogradouro(ende.getLogradouro());
                                                            c.getEndereco().setNumero(ende.getNumero());
                                                            c.getEndereco().setComplemento(ende.getComplemento());
                                                            c.getEndereco().setCep(ende.getCep());
                                                            c.getEndereco().setBairro(ende.getBairro());
                                                            c.getEndereco().setCidade(ende.getCidade());
                                                            c.getEndereco().setEstado(ende.getEstado());

                                                        }else{

                                                            c.getEndereco().setLogradouro(request.getParameter("logradouro"));
                                                            c.getEndereco().setNumero(request.getParameter("numero"));
                                                            c.getEndereco().setComplemento(request.getParameter("complemento"));
                                                            c.getEndereco().setCep(request.getParameter("cep"));
                                                            c.getEndereco().setBairro(request.getParameter("bairro"));
                                                            c.getEndereco().setCidade(request.getParameter("cidade"));
                                                            c.getEndereco().setEstado(request.getParameter("estado"));

                                                            Endereco end = ed.salvar(c.getEndereco());

                                                            c.getEndereco().setIdEndereco(end.getIdEndereco());

                                                        }

                                                        cd.alterar(c);
                                                        destino = "cinema.do?cmd=listar";
                                                        request.setAttribute("mensagem", "*Cinema alterado com sucesso.");
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{
                      
                        request.getRequestDispatcher(destino).forward(request, response);
                        
                    }

                }

                if (cmd.equals("excluir")){

                    CinemaDao cd = new CinemaDao();

                    String destino = "cinema.do?cmd=listar";

                    try{

                            Cinema c = new Cinema();

                            c.setIdCinema(Integer.parseInt(request.getParameter("id")));

                            cd.excluir(c);

                            
                            request.setAttribute("mensagem", "*Cinema desativado com sucesso.");

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

                }

                if (cmd.equals("listar")){

                    CinemaDao cd = null;
                    String destino = "admin/cinema.jsp";
                    try{

                        cd = new CinemaDao();

                        List<Cinema> lista = cd.buscarTodos();

                        request.setAttribute("cinemas", lista);

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

                }
                if(cmd.equals("form")){

                    String destino = "cinema.do?cmd=listar";

                    try{

                        HttpSession session = request.getSession(true);

                        Usuario u = (Usuario) request.getSession().getAttribute("sessao");

                        if(u!=null){
                            destino = "admin/cadastro_cinema.jsp";
                        }else{

                            throw new Exception("*Você deve estar logado!");

                        }

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

                }

                if(cmd.equals("buscar")){

                    CinemaDao cd = new CinemaDao();
                    String destino = "cinema.do?cmd=listar";

                    try{

                        HttpSession session = request.getSession(true);

                        Cinema cinema = new Cinema();

                        cinema.setIdCinema(Integer.parseInt(request.getParameter("id")));

                        Usuario u = (Usuario) request.getSession().getAttribute("sessao");

                        if(u!=null){

                            destino = "admin/alterar_cinema.jsp";

                            cinema = cd.buscar(cinema);

                            request.setAttribute("cinema", cinema);

                        }else{

                            throw new Exception("*Você deve ser cadastrado e estar logado!");

                        }

                    }catch (Exception exc){

                        request.setAttribute("mensagem", exc.getMessage());

                    }finally{

                        request.getRequestDispatcher(destino).forward(request, response);

                    }

            }

        }
    } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
